import request from '@/utils/request';

function getTagsList() {
  return request.get('/api/tags');
}

export default {
  // // 文件名即 namespace，model 内如果没有声明 namespace，会以文件名作为 namespace(不要和其他model相同)
  namespace: 'tags',
  // 数据源
  state: {
    tagsList: [],
  },
  // 调用接口,获取数据
  /**
   * @object effects
   * @param 参数1 组件派发任务时,传递的参数(object)
   * @param 参数2 api
   * **/
  effects: {
    *fetchTagsList({ payload, payload2 }: any, { put, call }: any) {
      // * + yield  === async + await  (同步执行程序)
      /**
       * @function call (使用外界函数)
       * @param 参数1 外界函数(函数可以是一个Promise对象)
       * @param 剩下的所有参数 都是向外界函数传递的参数
       * **/
      const ret = yield call(getTagsList, '参数1', '参数2');

      /**
       * @function put (调用reducers,并传递数据)
       * **/

      // type:需要调用 reducers 的名称
      // 剩下的所有属性,都是当做参数传给reducers了
      yield put({
        type: 'setTagsList',
        payload: ret,
        payload2: '参数2',
      });
    },
  },
  // 更新数据源
  reducers: {
    setTagsList(state: any, action: any) {
      return { ...state, tagsList: action.payload.list };
    },
  },
};
